import * as fs from 'fs'
import * as path from 'path'

export class ServiceScanner {
  /**
   * 自动扫描并导入所有服务文件
   */
  static async scanAndImportServices() {
    try {
      // 根据环境确定服务文件夹路径
      const possiblePaths = [
        path.join(__dirname, '../service'),  // 相对于main的上级目录
        path.join(__dirname, './service'),   // 相对于main的同级目录
        path.join(__dirname, 'service')      // 直接在main目录下
      ]
      
      let servicePath: string | null = null
      
      for (const testPath of possiblePaths) {
        console.log(`🔍 尝试服务路径: ${testPath}`)
        if (fs.existsSync(testPath)) {
          servicePath = testPath
          console.log(`✅ 找到服务文件夹: ${servicePath}`)
          break
        }
      }
      
      if (!servicePath) {
        console.error('❌ 在所有可能的路径中都找不到服务文件夹:', possiblePaths)
        return
      }

      const files = fs.readdirSync(servicePath)
      
      // 过滤服务文件
      const serviceFiles = files.filter(file => 
        (file.endsWith('.ts') || file.endsWith('.js')) && 
        !file.endsWith('.test.ts') && 
        !file.endsWith('.test.js') &&
        file !== 'base_service.ts' && // 排除基类
        file !== 'base_service.js'   // 排除编译后的基类
      )

      console.log(`🔍 发现 ${serviceFiles.length} 个服务文件:`, serviceFiles)

      if (serviceFiles.length === 0) {
        console.warn('⚠️ 未发现任何服务文件')
        return
      }

      // 动态导入所有服务文件
      for (const file of serviceFiles) {
        try {
          const modulePath = path.join(servicePath, file)
          console.log(`📥 自动导入服务: ${file}`)
          
          // 动态导入模块
          require(modulePath)
          
        } catch (error) {
          console.error(`❌ 导入服务失败 ${file}:`, error)
        }
      }

      console.log('✅ 所有服务文件自动导入完成')
      
    } catch (error) {
      console.error('❌ 扫描服务文件失败:', error)
    }
  }

  /**
   * 手动导入服务（备用方案）
   */
  static manualImportServices() {
    try {
      console.log('🔧 使用手动导入服务模式')
      
      // 尝试不同的路径导入已知的服务
      const possibleServicePaths = [
        '../service/user_service',   // 相对路径1
        './service/user_service',    // 相对路径2
        'service/user_service'       // 相对路径3
      ]
      
      let imported = false
      
      for (const servicePath of possibleServicePaths) {
        try {
          console.log(`🔍 尝试导入: ${servicePath}`)
          require(servicePath)
          console.log(`✅ 成功导入: ${servicePath}`)
          imported = true
          break
        } catch (error) {
          console.log(`❌ 导入失败: ${servicePath}`)
          // 继续尝试下一个路径
        }
      }
      
      if (!imported) {
        // 最后尝试直接使用绝对路径
        try {
          const absolutePath = path.join(__dirname, 'service', 'user_service')
          console.log(`🔍 尝试绝对路径导入: ${absolutePath}`)
          require(absolutePath)
          console.log('✅ 绝对路径导入成功')
          imported = true
        } catch (error) {
          console.error('❌ 绝对路径导入也失败:', error)
        }
      }
      
      if (imported) {
        console.log('✅ 手动导入服务完成')
      } else {
        console.error('❌ 所有手动导入尝试都失败')
      }
    } catch (error) {
      console.error('❌ 手动导入服务失败:', error)
    }
  }
}